package com.bbz.core.minstack;

import java.util.Random;
import java.util.Stack;

public class MinStack {
	private Stack<Integer> stackData;// 数据栈
	private Stack<Integer> stackMin;// 保存当前最小数的栈（称最小栈
	// 构造函数

	public MinStack() {
		stackData = new Stack<>();
		stackMin = new Stack<>();
	}

	// 压人函数
	public void push(Integer num) {
		// 压入时判断最小栈是否为空或者要压入的数是否比最小栈栈顶数还小，时则压入数据站的同时压入最小栈
		if (stackMin.isEmpty() || getMin() > num) {
			stackMin.push(num);
		}
		stackData.push(num);
	}

	// 弹出函数
	public Integer pop() {
		Integer num = stackData.pop();
		if (stackMin.peek() == num) {
			stackMin.pop();
		}
		return num;
	}

	// 获取栈中最小数
	public Integer getMin() {
		return stackMin.peek();
	}

	public static void main(String args[]) {
		MinStack stack = new MinStack();
		for (int i = 0; i < 100; i++) {
			stack.push(i);
		}

		for (int i = 0; i < 100; i++) {
			System.out.println(stack.pop());
		}

	}
}
